home *** CD-ROM | disk | FTP | other *** search
-
-
-
- Requirements
- ------------
-
- - 020+
-
- - v39/OS3.0+
-
- - a blitter free gfx system (FBlit(v3.77+), CGX, P96(perhaps))
-
- - an RTG icon system was required with previous version, but probably
- isn't strictly necessary anymore.
-
- - mmu.library v42+ for MMU support (MuGuardianAngel v40.41+ if you want
- to use MGA with FScreen)
-
- - fast RAM (lots!)
-
-
-
-
- Installation
- ------------
-
- Launch FScreen with 'run' some time after FBlit has been installed eg.
-
- 'run >nil: FScreen lace delay=2 noscan'
-
- If you use FBlit, it will require some reconfiguration. You must use the
- QBSBlitPatch and un-install the Add/RemIBobPatch pair. Un-installing
- OSTLPatch is probably a good idea as well.
-
- As of v0.21 of FScreen, you no longer need to set FBlit's FAllocBitMap
- patch to promote displayable bitmaps, FScreen will install it's own patch
- to do this job. FAllocBitMap is still required to promote non-displayable
- bitmaps though, for now at least.
-
- Note: currently there is no way to stop FScreen installing it's own
- Alloc/FreeBitMap() patches, and there is no per-task promotion. All
- screens will be forced into fast RAM while FScreen is running.
-
-
-
-
- Options
- -------
-
- By default FScreen will use a simple refresh mode with a delay of 3/50s
- between cycles and the LoadView() patch installed. If requirements for
- MMU use are met, MMU assisted refresh will be used.
-
-
- PRIORITY= sets the priority of FScreen (and the refresh ATM), this
- defaults to 20.
-
- NOLVPATCH stops FScreen installing the LoadView() patch. This patch is
- only needed for cosmetic reasons. Using this switch will just
- make the display turn to garbage more often.
-
- DELAY= sets the delay between refresh cycles. The actual refresh rate
- depends on this value plus the time it takes to do the refresh
- operation. Setting this to 0 isn't a good idea.
-
- LACE makes FScreen do interlaced refresh cycles. This is twice as
- fast but causes significant visual disturbance. It's only
- really usable with 'DELAY=1'. If the MMU is being used, this
- switch is ignored, but it's still usefull to specify it in
- case MMU cfg fails.
-
- NOMMU stops FScreen from using the MMU.
-
- NODELTA stops FScreen from allocating delta buffers for the display.
- Setting this isn't recommended since it will slow the refresh
- operation down significantly.
-
- NOSCAN stops the periodic copper scan, in which case all displays
- are based purely on the results of the LoadView() patch. If
- you specify both this and 'NOLVPATCH', you will have a
- permanently garbage display so best not to bother really ;)
-
- NOASM stops FScreen using it's assembler delta refresh code. This
- is just for test purposes.
-
-
- FScreen can be terminated with CTRL_C/break. Or it could, with v0.21 it
- is unsafe to quit FScreen if there are any fast RAM screens open. In that
- case, the system will crash whenever a fast RAM screen closes.
-
-
-
- Bugs & Features
- ---------------
-
- - ATM FScreen doesn't know when bitmaps are freed, and can end up
- refreshing non-existant source planes for a short time, causing a
- stream of hits under MGA when screens close.
- (shouldn't happen with v0.21+)
-
- - programmes which save the copper list, and later re-install it, may
- cause refreshed screens to appear 'frozen'/corrupt. This is because
- FScreen will free the chip planes as soon as they are no longer
- present in the active copper list. When the old copper list is re-
- installed, it will still contain pointers to these old chip plane
- structures, which may still hold the old image data, or may be
- more or less corrupt, and, since the copper list contains pointers to
- chip memory, FScreen will not create new planes for the display.
- Swapping screens (or attempting to) will cause a copper list rebuild,
- and refresh will re-start.
-
- - OS double buffering doesn't work (it's corrupt). Best theory for this
- ATM is that screen buffers aren't actually refered to by bitmap
- structures in intuibase/ViewLord (or gfxbase/ActiView).
-
- Interestingly (or not), double buffering almost sort of half works
- when using the 'NOSCAN' switch.
-
- - swapping screens in MMU mode, with MGA active, will crash the system
- pretty quick. (fixed in the latest versions of MGA (40.41))
-
- - garbage displays will occur for a short time whenever a new screen
- becomes visible, and at other times if the LV patch isn't installed.
-
- - in MMU mode certain rendering operations will not be detected and
- won't appear on the visible display (except by accident). This will
- include any rendering done by DMA devices (unlikely), and any
- rendering done by the PPC. Nothing much can be done about that, but
- there is currently another class of undetectable rendering which will
- get fixed at some point.. Rendering done in supervisor mode won't be
- detected (fix this in FScreen). Rendering done from a private MMU
- context will work until the display changes, then it will fail
- (requires a new mmu.library).
-
- - if an MMU assisted screen is closed, and re-opened again quickly, it
- is possible for MMU cfg to fail, in which case the screen will revert
- to 'normal' refresh mode (and kill system performance). Swapping
- screens again will usually get the screen back using MMU mode. Since
- FScreen doesn't know when a screen closes, the associated MMU cfg may
- linger for some time. During this period another screen may have been
- created using some of the address range covered by the old MMU cfg,
- and in this case it will be impossible to configure the MMU for the
- new screen (until the old one has been freed by FScreen).
-
- There are other issues related to this eg. if a lot of screens are
- opened and closed in a short period, chip RAM may run out. And, it is
- also possible for two planes to cover the same source address range,
- which can cause the wrong plane (ie. one that has been freed) to be
- re-inserted in the copper list and maintained active by FScreen.
- (most of this stuff should be obsolete with v0.21+, but running out
- of chip memory is still possible (indeed, more likely))
-
- - due to the high priority of FScreen, it can occassionally give the
- impression of locking up the system for short periods, especially
- when swapping screens. In the case of PPaint, this pause can include
- freezing the mouse pointer, but that appears to be an exceptional case
- (ClaontoScreenManager<sp> is up to some funny business I guess..)
-
- - since FScreen runs as a normal task, the refresh operation will cease
- whenever multi-tasking is suspended (or a higher priotity task hogs
- the system), effectively freezing the display until normal task
- switching resumes.
-
-
-
- What Happened Before
- --------------------
-
- v0.21
- -----
- - plane list access arbitration changed again. All access is done under
- Forbid() (alse rewrote various functions to minimize access times).
- - MMUPlaneSetUp() is no longer called from AddPlaneListElement(), which
- allows LVPatch to safely(perhaps) create new planes. It is currently
- called from RefreshPlanes().
- - newly allocated chip planes are no longer cleared. Instead, screen
- data is copied directly to the chip planes/delta buffer.
- - FindPlanesBMP() now accepts the View it will search as a parameter, in
- the case of LVPatch this is the View supplied to LoadView(), which
- could spell trouble if a dummy View is used.
- - Add/RemPlaneListElement() have become Alloc/FreePlaneListElement() ie.
- they don't deal with lists anymore.
- - cleared up some inconsistencies in the function prototypes!?
- - added a new argument 'NOSCAN' which stops periodic copper list scans.
- (also played about with stopping the periodic CleanUpPlanesList() call
- but had to give up on that due to the PPaint related mouse lock up).
- - all MMU assisted planes to be freed are now dealt with in one go ie.
- with a single call to RebuildTree().
- - rewrote pretty much everything that hadn't been re-written already.
- - removed the 'scan' behaviour from LV patch.
- - main loop is now halted during execution of FindFastPlanes() partly to
- avoid the possibility of CleanUpPlanesList() running multiple times
- before FFP() has finished, culling planes that are required later, and
- partly to avoid refreshing at rather nonsensical times, making FFP()
- even slower than it already is.
- - added Alloc/FreeBitMap() patches and bitmap tracking
- - rewrote everything again to deal with the above change, but this is
- all in an intermediate state and will probably get re-written again to
- remove the base planes list etc.
- - added asm delta refresh routine
- - added 'NOASM' switch
-
-
- v0.20
- -----
- - changed LV patch function to use supplied gfxbase in a6...
- - fixed the CleanUpPlanesList() using mln_Succ instead of mln_Pred after
- removing elements bug (again ;) (thanks to Thomas)
-
-
- v0.19
- -----
- - switched to sensei's 0.18 source
- - removed context locking from MMU refresh code
- - removed non-cacheable memory cfg for descriptors array
- - modified copper list plane pointer to parent plane/bitmap conversion
- stuff, so that cpr pointers with a -2 offset can be recognized
-
-
- v0.18
- -----
- - changed MMU refresh code again. The refresh itself is defered so that
- the MMU context isn't locked during the entire refresh cycle. (until
- it becomes clear wether it is actually necessary to lock the context
- for Get/SetIndirect() in the first place..)
-
-
- v0.17
- -----
- - integrated sensei's re-coded/portable implementation of v0.14.
- - changed LVPatch to use 'scan' instead of signal.
- - cleanup/scan code, CleanUpPlanes() moved after FindFastPlanes().
- - refresh code rewritten some more, and dragged in MMUPlaneSetUp() as
- well this time. C part is finished (barring bugs), but delta(asm)
- code isn't written yet.
- - AccessPlaneList() rewritten for no reason.
-
-
- v0.16
- -----
- - LVpatch now signals FScreen on copper changes (triggers cleanup/scan).
- - cleanup/scan code, FindFastPlanes() is called half as often.
- - refresh code (C and asm) completely rewritten to use 'nice' descriptor
- access, and to make it suck a bit less (slower though, of course ;)
- <unfinished>
-
-
- v0.15
- -----
- - mmu.library is no longer opened if NOMMU switch is specified.
- - redesigned to allow MMU assist of completely non-aligned planes.
- - cleanup/scan code, added activiewcpr semaphore lock.
-
-